<!doctype html>
<html lang=ru id=faq>

<!-- If you make edits to any FAQ documents, please start each sentence
 on a new line, and try to keep the general formatting consistent
 with the rest of the pages -->

<title>Порты OpenBSD: руководство по тестированию</title>
<meta name= "description"   content= "OpenBSD Porting Guide">
<meta charset=utf-8>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="../../openbsd.css">
<link rel="canonical" href="https://www.openbsd.org/faq/ports/testing.html">

<h2 id=OpenBSD>
<a href="../../index.html">
<i>Open</i><b>BSD</b></a>
Порты - руководство по тестированию
<small>
<a href="index.html">[Порты - На главную]</a>
</small>
</h2>
<hr>

<ul>
  <li><a href="#Introduction">Введение</a>
  <li><a href="#Testing"     >Тестирование</a>
  <li><a href="#Commenting"  >Комментирование</a>
  <li><a href="#More"        >И снова тестирование</a>
</ul>

<hr>

<h2 id="Introduction">Введение</h2>

<a href="ports.html">Дерево портов</a> это колоссальная работа, результат
которой позволяет каждому пользоватю OpenBSD исользовать third party программы
без необходимости тратить время на изучение тонкостей их работы, внесение
необходимых изменений (с целью запустить программы именно в среде OpenBSD),
конфигурацию и установку.
Вся эта работа проделывается группой волонтеров, кто тратит время и силы на
портирование и тестирование приложений в OpenBSD.

<p>
Многие думают, что они не могут помочь по причине того, что не обладают
достаточной для этого процесса квалификацией. Это не верно. Каждый может помочь
разработчикам (тем, кто занимается портированием софта) делать свою работу лучше
и быстрее. Тестируйте обновления или новые порты, о которых сообщается в
<a href="../../mail.html">рассылке, посвященной портам</a>.
Делая это, вы уменьшаете задержку последюущих коммитов, а также увеличиваете
количество портов, добавляемых в саму систему. Многие порты не добавленны
лишь по причине того, что они до сих пор не протестированны.

<p>
Работа над новыми портами ведется в <a href="../faq5.html#Flavors">-current</a>;
нет никакой гарантии, что новые порты или их обновления будут корректно
работать в других версиях (branches).
Это значит, что вы должны обновить свою систему и дерево портов до -current.
Инструкцию, где описывается как это сделать, можно найти на странице
<a href="https://www.openbsd.org/faq/current.html">посвященной current</a>.
Также рекомендуется подписаться на рассылки ports и ports-changes.
Это поможет быть в курсе новых изменений в дереве портов и их обновлений.

<h2 id="Testing">Тестирование</h2>

В почтовых рассылках есть два типа материалов: новые порты и обновления.
О новых портах как правило сообщается в письмах, к которым прикрепляются
архив (tarball) или ссылка на него. Хорошей идеей будет распаковать его
в каталоге <code>/usr/ports/mystuff/</code> и протестировать там.
Обновления как правило представляют из себя diff для дерева портов в -current.
Лучше всего скопировать порт в <code>mystuff/</code> и использовать diff,
чтобы предотвратить поломку всего дерева.
Если установлена предыдущая версия порта, рекомендуется удалить ее перед
сборкой более новой версии, чтобы избежать побочных эффектов, таких как
символы, отсутствующие в более старой версии библиотеки.

<p>
Необходим процесс пошаговой сборки, чтобы быть уверенным, что каждый target,
смотри <a href="https://man.openbsd.org/ports">ports(7)</a>, правильно собран
(achieved correctly):

<ul><li>
<i>fetch</i>
<ul><li>
Необходим, чтобы удостовериться, что все необходимые для порта файлы
(distfile(s)) могут быть корректно загруженны.
Попробуйте протестировать все указанные <code>MASTER_SITES</code>, чтобы
убедиться, что все они являются рабочими (valid sources).
</ul>

<li>
<i>checksum</i>
<ul><li>
Проверьте, что у всех загруженных distfiles совпадают checksums,
с теми, которые находятся в <code>distinfo</code> файле.
Чтобы загрузить distfiles со всех указанных источников и проверить их
checksum, воспользуйтесь этой командой (её следует запустить из
каталога порта):

<pre class="cmdbox">
$ <b>for ms in $(make show=MASTER_SITES); do make clean=dist; make fetch checksum MASTER_SITES=$ms; done</b>
</pre>
</ul>

<li>
<i>extract</i>
<ul><li>
Target <code>prepare</code> запускается автоматически до <code>extract</code>.
Его задача - установить все <code>{BUILD,LIB}_DEPENDS</code> для этого порта
(такие как bzip2).
</ul>

<li>
<i>patch</i>
<ul><li>
При использовании патчей не должно быть никаких warnings. Процесс должен
проходить гладко, без каких-либо проблем.

<li>
В каталоге <code>patches/</code> не должно оставаться никаких ".orig" файлов.

<li>
Другой распространенной ошибкой является включение в патч тегов RCS;
это сломает порт, когда он будет добавлен в репозиторий, а тег RCS будет
развернут.
</ul>

<li>
<i>configure</i>
<ul><li>
Проверьте, что скрипт configure правильно определяет окружение (features)
на вашей платформе.

<li>
Скрипт configure не должен обнаруживать случайных приложений, уже
установленных в вашей системе, без явных настроек зависимостей, заданных
в порту.

<li>
Если порт не собирается с помощью libtool из base, вы можете попробовать
установить <code>USE_LIBTOOL=gnu</code>, которая использует исправленную
версию (patched version) из портов. GNU libtool печально известен своими
нежелательными «возможностями» в OpenBSD, поэтому, если порт не собирается
с помощью libtool из base, это должно быть исправлено, а в исходниках
порта должен быть комментарий о том, почему в порте используется
<code>Makefile</code>.

<li>
Если порт использует CMake, и вы видите нежелательные результаты на этом
этапе, обязательно проверьте или отправьте следующие файлы дополнительно:

<ul>
<li>
<code>${WRKBUILD}/CMakeCache.txt</code>
<li>
<code>${WRKBUILD}/CMakeFiles/CMakeError.log</code>
<li>
<code>${WRKBUILD}/CMakeFiles/CMakeOutput.log</code>
</ul>

</ul>

<li>
<i>build</i>
<ul><li>
Не должно быть никаких ошибок сборки (build errors) и подозрительных
warnings.

<li>
Warnings касательно <a href="https://man.openbsd.org/tmpnam">tmpnam(3)</a>
должны решаться при помощи
<a href="https://man.openbsd.org/mkstemp">mkstemp(3)</a>.

<li>
Установите для переменной <code>SEPARATE_BUILD</code> значение 'Yes'
и попробуйте после этого пересобрать порт снова. Все должно работать.

<li>
Удостоверьтесь, что зависимости от GNU make действительно необходимы.
</ul>

<li>
<i>test</i>
<ul><li>
Проверьте на наличие ошибок (empty tests means okay).
 
<li>
Если у тестов есть зависимости, отличные от указанных в
<code>{BUILD,RUN}_DEPENDS</code>, убедитесь, что <code>TEST_DEPENDS</code>
определен правильно.
</ul>


<li>
<i>fake</i>
<ul><li>
Эта target устанавливает приложение в поддельный (fake) рабочий каталог,
чтобы гарантировать, что все файлы могут быть легко упакованы без влияния/эффектов
на базовую часть системы.

<li>
Порт <b>никогда</b> не должен устанавливать свои файлы вне fake-каталога,
например  в <code>/usr/local</code>.

<li>
При использовании GNU libtool иногда возникают проблемы с перекомпоновкой
библиотек во время fake-процесса на некоторых архитектурах.

<li>
Проверьте, что все файлы после установки имеют правильного владельца (ownerships) и
и правильные права доступа (permissions).
</ul>

<li>
<i>port-lib-depends-check</i>
<ul><li>
Это проверит, все ли библиотеки, от которых зависит порт, могут быть
найдены/доступны через <code>LIB_DEPENDS</code> или <code>WANTLIB</code>.
Результат должен быть пустым.
Перечисленные выше переменные следует проверять, когда вы видите строки,
начинающиеся с «Extra» или «Missing».
</ul>

<li>
<i>package</i>
<ul><li>
Собрка пакета может быть поломана, если <code>pkg/PLIST*</code> и/или
<code>pkg/PFRAG*</code> неправильны.
</ul>

<li>
<i>install</i>
<ul><li>
Пакеты должны установить все файлы из своих списков успешно и с правильными
правами доступа. Будьте особенно осторожны с файлами, у которых установлен
бит setuid.

<li>
Убедитесь, что скрипт <code>INSTALL</code>, принадлежащий пакету,
делает именно то, что должен, и ни в коем случае ничего (ни одного файла)
не перезаписывает в <code>/etc</code>.
</ul>

<li>
<i>deinstall</i>
<ul><li>
Это должно удалять все файлы, установленные пакетом, за исключением тех, что
в <code>/etc</code>.

<li>
Системные файлы, созданные пакетом во время выполнения, должны быть помечены
как <code>@extra</code> и/или
<code>@extraunexec</code> в <code>pkg/PLIST*</code>.
</ul>

</ul>

<p>
Оставшиеся <code>pkg/</code> файлы, такие как <code>DESCR</code> и
<code>MESSAGE</code>, должны быть проверены на грамматику и опечатки.
Абзацы должны быть отформатированы с использованием
<a href="https://man.openbsd.org/fmt">fmt(1)</a> по 80 символов на строку.

<h2 id="Commenting">Комментирование</h2>

В конце теста наконец-то действительно важная вещь: комментарии.
Даже если порт работает нормально, комментарии должны быть сделаны.
Если у нас есть десять комментариев, в которых люди говорят, что порт
работает нормально под разными архитектурами, то добавление порта в репозиторий
произойдет быстрее. Если что-то не работает, то соответствующая информация
должна быть предоставлена. Есть инструменты, которые могут помочь в на
этом этапе, например
<a href="https://man.openbsd.org/portslogger">portslogger(1)</a>, который
похож на «интеллигентный <a href="https://man.openbsd.org/tee">tee(1)</a>»,
который перенаправляет вывод в log-файл.

<p>
Пример:

<pre class="cmdbox">
# <b>make install 2&gt;&amp;1 | /usr/ports/infrastructure/bin/portslogger .</b>
</pre>

Это перенаправит вывод в log-файл, находящийся в этом же каталоге.

<p>
Наконец, как только будет установлено, что порт исправен, следует проверить
и другие порты, зависящие от него, чтобы убедиться, что и они по-прежнему
работают правильно. Target <code>show-required-by</code> поможет найти другие
порты, которые зависят от него.

<h2 id="More">И снова тестирование</h2>

Проверьте <code>Makefile</code> порта на правильные зависимости, опечатки,
неправильные ссылки, бесполезные или отсутствующие переменные, правильное
лицензирование и категорию. Те, кто более опытен, могут помочь, изучив
патчи, а также предоставив diff для исправления ошибок или других улучшений.

<p>
Эти diff(s) должны быть сделаны с опциями <code>-uNprx CVS</code>.
<code>cvs diff -uNp</code> также можно использовать для создания патчей для
CVS репозитория.
